package transporte.web.seguridad;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import transporte.server.entity.Usuario;
import transporte.server.seguridad.SeguridadService;
import transporte.util.JSonUtils;

@Controller
@RequestMapping("/seguridad/*")
public class SeguridadController {

	public static final String LOGGED_USER = "loggedUser";
	public static final String PRIV_MANGER = "hasPriv";
	public static final long ESTADO_ACTIVO = 1L;
	
	private static final Logger logger = Logger.getLogger(SeguridadController.class);
	
	@Autowired
	private SeguridadService seguridadService;
	
	@RequestMapping
	public void login() {
		
	}
	
	@RequestMapping("ajax/login")
	public String processLogin(HttpSession session,
			ModelMap model,
			@RequestParam String login,
			@RequestParam String password,
			@RequestParam(required=false) String redirectUrl) {
		
		Usuario usuario = seguridadService.getUsuarioByLogin(login);
		if (usuario != null
				&& usuario.getPassword().equals(password) 
				&& usuario.getEstado().getIdEstado() == ESTADO_ACTIVO) {
			/**
			 * Setiar el usuario y los privilegios a la session
			 * 
			 * Note: Usuario y atributos evictados de la session de hibernate 
			 */
			session.setAttribute(LOGGED_USER, seguridadService.getUsuarioEvicted(usuario));
			session.setAttribute(PRIV_MANGER, seguridadService.getPrivsManager(usuario));
			if (logger.isInfoEnabled())
				logger.info("Usuario Logeado: "+usuario.getLogin());
			
			return JSonUtils.getJSonSuccessView(model);
		} else {
			return JSonUtils.getJSonView(model, "Usuario o Pastword Invalido.");
		}
	}
	
}
